summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2022-06-27 21:45:33 +0200
committerFernando Sahmkow <fsahmkow27@gmail.com>2022-10-06 21:00:53 +0200
commit8a372035db35465b8241d1e13eeb979e8682bb3f (patch)
tree80ca9787dd65b32b028e429e0c591473ee1d2095
parentCore: Fix get nvmap object random crash (diff)
downloadyuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar.gz
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar.bz2
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar.lz
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar.xz
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.tar.zst
yuzu-8a372035db35465b8241d1e13eeb979e8682bb3f.zip
-rw-r--r--src/core/hle/service/nvdrv/core/nvmap.cpp4
-rw-r--r--src/core/hle/service/nvdrv/core/nvmap.h2
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue_consumer.cpp2
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue_producer.cpp2
4 files changed, 5 insertions, 5 deletions
diff --git a/src/core/hle/service/nvdrv/core/nvmap.cpp b/src/core/hle/service/nvdrv/core/nvmap.cpp
index dd30e156e..f811b66a0 100644
--- a/src/core/hle/service/nvdrv/core/nvmap.cpp
+++ b/src/core/hle/service/nvdrv/core/nvmap.cpp
@@ -207,14 +207,14 @@ void NvMap::UnpinHandle(Handle::Id handle) {
}
}
-void NvMap::DuplicateHandle(Handle::Id handle) {
+void NvMap::DuplicateHandle(Handle::Id handle, bool internal_session) {
auto handle_description{GetHandle(handle)};
if (!handle_description) {
LOG_CRITICAL(Service_NVDRV, "Unregistered handle!");
return;
}
- auto result = handle_description->Duplicate(false);
+ auto result = handle_description->Duplicate(internal_session);
if (result != NvResult::Success) {
LOG_CRITICAL(Service_NVDRV, "Could not duplicate handle!");
}
diff --git a/src/core/hle/service/nvdrv/core/nvmap.h b/src/core/hle/service/nvdrv/core/nvmap.h
index b6613a521..ef2df3ad7 100644
--- a/src/core/hle/service/nvdrv/core/nvmap.h
+++ b/src/core/hle/service/nvdrv/core/nvmap.h
@@ -165,7 +165,7 @@ public:
/**
* @brief Tries to duplicate a handle
*/
- void DuplicateHandle(Handle::Id handle);
+ void DuplicateHandle(Handle::Id handle, bool internal_session = false);
/**
* @brief Tries to free a handle and remove a single dupe
diff --git a/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp b/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp
index a0330ab4a..1ce67c771 100644
--- a/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp
+++ b/src/core/hle/service/nvflinger/buffer_queue_consumer.cpp
@@ -136,7 +136,7 @@ Status BufferQueueConsumer::ReleaseBuffer(s32 slot, u64 frame_number, const Fenc
slots[slot].buffer_state = BufferState::Free;
- nvmap.FreeHandle(slots[slot].graphic_buffer->BufferId(), false);
+ nvmap.FreeHandle(slots[slot].graphic_buffer->BufferId(), true);
listener = core->connected_producer_listener;
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
index a4e46964c..d4ab23a10 100644
--- a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
+++ b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
@@ -532,7 +532,7 @@ Status BufferQueueProducer::QueueBuffer(s32 slot, const QueueBufferInput& input,
item.is_droppable = core->dequeue_buffer_cannot_block || async;
item.swap_interval = swap_interval;
- nvmap.DuplicateHandle(item.graphic_buffer->BufferId());
+ nvmap.DuplicateHandle(item.graphic_buffer->BufferId(), true);
sticky_transform = sticky_transform_;